iT邦幫忙

2026 iThome 鐵人賽

DAY 30
0

終於到最後一天啦!我們寫的元件已經經過了Batch Size為1的測試,因為篇幅的關係所以沒有寫更完整的測試。但沒關係,今天就是用我們的元件展示各種情境,最後再做個總結

元件展示

設定環境變數

我沒有打算把插件安裝到GStreamer的預設目錄底下,所以我們要先設定環境變數讓GStreamer找得到這個插件,有顯示資訊的話就代表設定正確

export GST_PLUGIN_PATH="/ironman/sources/gst/colormagic/src"
gst-inspect-1.0 ironmancolormagic

Batch Size = 1

export URI="file:///opt/nvidia/deepstream/deepstream/samples/streams/sample_720p.mp4"

gst-launch-1.0 nvurisrcbin uri=${URI} ! mux.sink_0 \
    nvstreammux name=mux batch-size=1 width=1280 height=720 ! \
    ironmancolormagic ! \
    nvvideoconvert ! \
    nvv4l2h264enc ! \
    h264parse ! \
    mp4mux ! \
    filesink location="/ironman/colormagic_b1.mp4"

result_1

Batch Size = 4

export URI="file:///opt/nvidia/deepstream/deepstream/samples/streams/sample_720p.mp4"

gst-launch-1.0 nvurisrcbin uri=${URI} ! mux.sink_0 \
    nvurisrcbin uri=${URI} ! mux.sink_1 \
    nvurisrcbin uri=${URI} ! mux.sink_2 \
    nvurisrcbin uri=${URI} ! mux.sink_3 \
    nvstreammux name=mux batch-size=4 width=1280 height=720 ! \
    ironmancolormagic ! \
    nvmultistreamtiler rows=2 columns=2 ! \
    nvvideoconvert ! \
    nvv4l2h264enc ! \
    h264parse ! \
    mp4mux ! \
    filesink location="/ironman/colormagic_b4.mp4"

result_4

DeepStream總結

可以看到我們寫的元件可以順利地完成預期的效果,而這就是深入了解DeepStream之後做出來的成果。我之所以會選擇呈現這樣的元件是因為它足以讓大家了解到如何從NvBufSurface和NvDsBatchMeta找到我們需要的資料,整個DeepStream也就是圍繞著這兩樣東西在操作。不選擇示範調用模型的原因是這份文章想要傳達的是通用的概念,我也不清楚大家實務上會用到什麼模型,也許nvinfer和nvinferserver就足以應付這些模型,而我就是因為實務上那兩個元件不能應付產品的需求,才要自己開發GStreamer插件搭配DeepStream使用

延伸挑戰

這邊就列出一些大家可以基於ironmancolormagic去進一步研究的方向

色彩可變

現在元件修改色彩的方式是寫死的,我們可以嘗試替它加上一些屬性,讓呼叫者可以去選擇不同的上色方式,比較容易的做法是練習定義GLib的Enum,讓呼叫者去選擇特定的上色方式

上色範圍可變

可以增加屬性讓呼叫者可以設定ROI,元件就只會修改ROI內的色彩。這個可以延伸一些應用,例如ROI內打碼,雖然9.1的nvdsosd就有內建,但也是一個嘗試方向

特定Bounding Box上色

這個就更有挑戰性了,大家可以嘗試去篩選出特定物體的Bounding Box,然後只有在這些Bounding Box的範圍內上色,但是要記得考慮如果Bounding Box重疊的話,該怎麼應對這種情況

心得

這次花了很大的篇幅希望能幫大家打好基礎,我也在這個過程中學到了之前工作中遺漏的知識。NVIDIA都希望用戶能夠直接將DeepStream設計好的應用跟模型佈署到正式產品,但多人的產品絕對不是像DeepStream說的那麼簡單,如果你有認真學著怎麼寫插件的話,我相信一定能幫助到你解決產品上的困境。

這整個系列的文章都是我事先設計好的,雖然有幾天因為需要篇幅稍微水了一點,但整個進度的安排算是相當順利,慶祝邊加班還要寫鐵人賽的日子終於結束啦!


上一篇
[Day 29] 如何測試你的GStreamer插件
系列文
深入認識DeepStream,不只是停在執行範例 共 30 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言